/*File Name		: DateTime.h*/
/*Date			: 31-10-2012 */
/*Maker Name	: Jonathan Ery Pradana (23512038), Muhammad Ghufron Mahfudhi (23512066) */
/*Mendeskripsikan definisi Class DateTime*/

#ifndef _DATE_TIME_H
#define _DATE_TIME_H

#include <ctime>
#include <vector>

#include "../ElementCal/ElementCal.h"

class DateTime: public ElementCal{
	private:
		time_t T;	//banyak detik sejak 01/01/1970 00:00:00

	public:
		/** Validator **/
		int IsDTValid(int, int, int, int, int, int);
		/* Mengembalikan 1 jika elemen date dan time valid */
		int IsKabisat (int Y);
		/*	Menghasilkan 1 jika tahun Y adalah tahun kabisat yaitu habis dibagi 4 tetapi tidak habis dibagi 100, atau habis dibagi 400 */
		
		/** 4 sekawan **/
		DateTime();
		/* Constructor: membuat DateTime default: banyak detik saat ini sejak 1 Januari 1970 */
		DateTime(int, int, int, int, int, int);
		/* Constructor: membuat DateTime berdasarkan parameter date dan time */
		/* Prekondisi: parameter date dan time sudah valid */
		DateTime(string);
		/* Constructor: membuat DateTime berdasarkan string */
		/* Prekondisi: format string sudah valid: "DD/MM/YYYY hh:mm:ss" */
		DateTime(const DateTime&);
		/* Copy constructor */
		DateTime& operator=(const DateTime&);
		/* Overloading operator = */
		~DateTime();
		/* Destructor */
		
		/** Getter & Setter **/
		time_t GetT();
		/* Mengembalikan t */
		void SetT(const time_t& t);
		/* Mengeset t dengan _t */
		/* I.S. DateTime sudah terbentuk */
		/* F.S. T sesuai dengan parameter */
		
		/** Method **/
		void AddTime(int second);
		/* Menambah t sebanyak second detik */
		friend int operator<(const DateTime& D1, const DateTime& D2);
		/* Overload operator <, Mengembalikan 1 jika D2 < D1 */
				
		/** Override method **/
		void Print();
		/* I.S. dateTime terdefinisi */
		/* F.S. Nilai dateTime ditulis ke layar beserta komponen-komponennya */
		/* Proses : Menulis nilai setiap komponen dateTime ke layar */
		void Read();
		/* I.S. Sembarang */
		/* F.S. dateTime terdefinisi dan merupakan dateTime yang valid */
		/* Proses : Membaca komponen dateTime dari masukan pengguna */
		string ToString();
		/* Mengembalikan DateTime dalam format "DD/MM/YYYY hh:mm:ss" */
		void MakeFromString(string s);
		/* Membentuk DateTime dari elemen yang bertipe string */
		/* I.S. format string sesuai: "DD/MM/YYYY hh:mm:ss" */
		/* F.S. DateTime terdefinisi */
};

#endif
